package cc.ucanuup.web.base.controller;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import cc.ucanuup.common.support.base.Msg;
import cc.ucanuup.common.support.easyui.view.EasyuiPage;
import cc.ucanuup.service.base.entity.UpMenus;
import cc.ucanuup.service.base.inter.UpMenuservice;
import cc.ucanuup.web.base.model.MenuModel;
import cc.ucanuup.web.base.model.SearchMenuModel;
import cc.ucanuup.web.base.vo.MenuLevelCombox;

/**
 * 文件名： com.bozhon.srm.web.base.controller.SrmMenuController.java
 * 作者：   WenBin
 * 日期：   2018年2月5日
 * 功能说明：外发菜单 控制层
 *
 * =========================================================
 * 修改记录：
 * 修改作者    日期      修改内容
 * =========================================================
 *  Copyright (c) 2010-2011 .All rights reserved.
 */
@Controller
@RequestMapping("/srm/menu")
public class UpMenuController {

	@Resource
	private UpMenuservice upMenuservice;
	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.menuPage
	 * @Description: 菜单管理的主页信息
	 * @author: WenBin
	 * @date: 2017年10月7日
	 * @version: 1.0
	 * @return
	 * String
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	//TODO
	@RequestMapping("/menuPage")
	public String menuPage(){
		return "base/power/menus/menuPage";
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.createOrUpdateMenu
	 * @Description: 更新或者修改菜单页面
	 * @author: WenBin
	 * @date: 2017年10月12日
	 * @version: 1.0
	 * @return
	 * String
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping("/createOrUpdateMenu")
	public String createOrUpdateMenu(String id,HttpServletRequest request){
		UpMenus menu = upMenuservice.findOne(id == null? "" : id);
		List<UpMenus> menus = null;
		if(menu == null){
			menu = new UpMenus();
		}else{
			menus =upMenuservice.findMenusByLevel(menu.getMenuLevel()-1);
		}
		//List<SystemModel> modelList = systemModelService.findAllActiveSystemModels();
		request.setAttribute("menu", menu);
		//request.setAttribute("modelList", modelList);
		request.setAttribute("menuLevelList", menus);
		return "base/power/menus/createOrUpdateMenu";
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.findMenusByLevel
	 * @Description: 找到当前菜单的父菜单
	 * @author: WenBin
	 * @date: 2017年10月13日
	 * @version: 1.0
	 * @param menuLevel
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping("/findMenusByLevel")
	@ResponseBody
	public Object findMenusByLevel(Integer menuLevel){
		return  upMenuservice.findMenusByLevel(menuLevel-1);
	}
	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.queryMenus
	 * @Description: 查询菜单信息 （分页）
	 * @author: WenBin
	 * @date: 2017年10月7日
	 * @version: 1.0
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/queryMenus")
	@ResponseBody
	public Object queryMenus(SearchMenuModel searchMenuModel){
		/*Page<Menu> page =  menuService.queryMenusAndSortIt(searchMenuModel);
		return new EuiGridVo<Menu>(page.getContent(), page.getTotalElements(), page.getNumber()+1);*/
		return null;
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.queryTopMenus
	 * @Description: 查询顶级菜单  （分页）
	 * @author: WenBin
	 * @date: 2017年10月11日
	 * @version: 1.0
	 * @param searchMenuModel
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/queryTopMenus")
	@ResponseBody
	public Object queryTopMenus(SearchMenuModel searchMenuModel){
		Page<UpMenus> page =  upMenuservice.queryTopMenusAndSortIt(searchMenuModel);
		return new EasyuiPage<UpMenus>(page.getContent(), page.getTotalElements(), page.getNumber()+1);
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.queryMenusByFid
	 * @Description: 通过父id 查询子菜单信息
	 * @author: WenBin
	 * @date: 2017年10月11日
	 * @version: 1.0
	 * @param fid 父ID信息
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/queryMenusByFid")
	@ResponseBody
	public Object queryMenusByFid(String fid){
		List<UpMenus> list =  upMenuservice.findMenusByFid(fid);
		return list;
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.saveOrUpdateMenu
	 * @Description:  保存或者更新菜单信息
	 * @author: WenBin
	 * @date: 2017年10月13日
	 * @version: 1.0
	 * @return
	 * Object
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/saveOrUpdateMenu")
	@ResponseBody
	public Object saveOrUpdateMenu(@Valid MenuModel menuModel,BindingResult bindResult, Model model) throws Exception{
		if (bindResult.hasErrors()) {
			List<ObjectError> map =bindResult.getAllErrors();
			return new Msg(false,"50",map);
		}
		UpMenus menu = upMenuservice.findOne(menuModel.getId() == null? "" :menuModel.getId());
		if(menu == null){
			menu = new UpMenus();
			BeanUtils.copyProperties(menuModel,menu );
			menu.setDeleted(0);
			menu.setStatus(0);
		}else{
			BeanUtils.copyProperties(menuModel, menu);
		}
		menu = upMenuservice.save(menu);
		return new Msg();
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.deleteMenu
	 * @Description: 删除菜单信息
	 * @author: WenBin
	 * @date: 2017年10月7日
	 * @version: 1.0
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/deleteMenu")
	@ResponseBody
	public Object deleteMenu(String id){
		upMenuservice.updateMenusDeleteStatus(id);
		return new Msg();
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.updateMenuStatus
	 * @Description: 变更菜单信息状态
	 * @author: WenBin
	 * @date: 2017年10月19日
	 * @version: 1.0
	 * @param id
	 * @return
	 * Object
	 * @throws Exception
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/updateMenuStatus")
	@ResponseBody
	public Object updateMenuStatus(String id) throws Exception{
		UpMenus menu = upMenuservice.findOne(id==null ? "" :id);
		if(menu!=null){
			if(menu.getStatus() == 0){
				menu.setStatus(1);
			}else{
				menu.setStatus(0);
			}
			upMenuservice.save(menu);
		}else{
			return new Msg(false,"50","菜单信息不存在，请刷新后再操作！");
		}
		return new Msg();
	}
	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.comboboxMenuLevel3
	 * @Description:查询菜单options
	 * @author: WenBin
	 * @date: 2017年10月16日
	 * @version: 1.0
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/comboboxMenuLevel3")
	@ResponseBody
	public Object comboboxMenuLevel3(){
		List<UpMenus> list = upMenuservice.findMenusByLevel(2);
		List<MenuLevelCombox> cb = new ArrayList<MenuLevelCombox>();
		MenuLevelCombox mc = null;
		for(UpMenus mu :list){
			mc = new MenuLevelCombox();
			mc.setText(mu.getMenuName());
			mc.setValue(mu.getId());
			cb.add(mc);
		}
		return cb;
	}

	/**
	 * @Method: com.bozhon.web.base.controller.MenuController.queryMenusTree
	 * @Description:查询菜单树
	 * @author: WenBin
	 * @date: 2017年10月16日
	 * @version: 1.0
	 * @return
	 * Object
	 * @update [日期YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	@RequestMapping(value="/queryMenusTree")
	@ResponseBody
	public Object queryMenusTree(String roleId){
		return upMenuservice.findRoleMenusStatusListByRoleId(roleId);
	}
}
